﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//	//Date提供getxxx函数
//	//get
//
//
//	//重载为成员函数
//	//左操作数是this，指向调用函数对象
//	//const修饰d2,其内容不能被修改，传引用是为了减少拷贝然而提高效率
//	bool operator==( const Date& d2)
//	{
//		return _year == d2._year
//			&& _month == d2._month
//			&& _day == d2._day;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//// 重载为全局的⾯临对象访问私有成员变量的问题
//// 有⼏种⽅法可以解决：
//// 1、成员放公有
//// 2、Date提供getxxx函数
//// 3、友元函数
//// 4、重载为成员函数
////bool operator==(const Date& d1, const Date& d2)
////{
////	return d1._year == d2._year
////		&& d1._month == d2._month
////		&& d1._day == d2._day;
////}
//int main()
//{
//	Date d1(2024, 7, 5);
//	Date d2(2024, 7, 6);
//
//	// 运算符重载函数可以显⽰调⽤
//	//operator==(d1, d2);
//
//	//// 编译器会转换成 operator==(d1, d2);
//	//d1 == d2;
//
//	// 运算符重载函数可以显示调用
//	d1.operator==(d2);
//
//	//编译器会转换成 d1.operator==(d2);
//	d1 == d2;
//
//	return 0;
//}
//
//








//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//	
////private:
//	int _year;
//	int _month;
//	int _day;
//};
//// 重载为全局的⾯临对象访问私有成员变量的问题
//// 有⼏种⽅法可以解决：
//// 1、成员放公有
//// 2、Date提供getxxx函数
//// 3、友元函数
//// 4、重载为成员函数
//bool operator==(const Date& d1, const Date& d2)
//{
//	return d1._year == d2._year
//		&& d1._month == d2._month
//		&& d1._day == d2._day;
//}
//int main()
//{
//	Date d1(2024, 7, 5);
//	Date d2(2024, 7, 6);
//
//	 //运算符重载函数可以显⽰调⽤
//	operator==(d1, d2);
//
//	// 编译器会转换成 operator==(d1, d2);
//	d1 == d2;//一般习惯写这种
//
//	return 0;
//}



//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//	Date& operator++()
//	{
//		cout << "前置++" << endl;
//		//...
//		return *this;
//	}
//	Date operator++(int)
//	{
//		Date tmp;
//		cout << "后置++" << endl;
//		//...
//		return tmp;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1(2024, 9, 2);
//	Date d2(2024, 9, 2);
//
//
//	// 编译器会转换成 d1.operator++();
//	++d1;
//
//	// 编译器会转换成 d1.operator++(0);
//	d1++;
//	return 0;
//}


//#include <iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	Date(const Date& d)
//	{
//		cout << " Date(const Date& d)" << endl;
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//	// 传引⽤返回减少拷⻉
//	// d1 = d2;
//	Date& operator=(const Date& d)
//	{
//		// 不要检查⾃⼰给⾃⼰赋值的情况
//		if (this != &d)
//		{
//			_year = d._year;
//			_month = d._month;
//			_day = d._day;
//		}
//		// d1 = d2表达式的返回对象应该为d1，也就是*this
//		return *this;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//
//	Date d1(2024, 7, 5);
//	Date d2(d1);
//	Date d3(2024, 7, 6);
//
//	// 需要注意这⾥是拷⻉构造，不是赋值重载
//	// 请牢牢记住赋值重载完成两个已经存在的对象直接的拷⻉赋值
//	d1 = d3;
//	
//	 
//
//	// ⽽拷⻉构造⽤于⼀个对象拷⻉初始化给另⼀个要创建的对象
//	Date d4 = d1;
//	return 0;
//}